﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Security.Principal;
using App_Negocio;

public partial class RegistrarCobro : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;
            if (!p.IsInRole("Empleado"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta página";

                if (Session["Identificador"] != null)
                {
                    Session["IrAPagina"] = "Principal_Clientes.aspx";
                    Response.Redirect("Bienvenida.aspx");
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                actualizarPagina();
            }
        }
    }

    private void actualizarPagina()
    {
        bool hayEventos= listarEventos();
        //  pnlPresupSelec.Visible = false;
        lblMensajePendientes.Visible = false;
        //txtNPrecioMenu1.Text = String.Empty;
        //txtNPrecioMenu2.Text = String.Empty;
        //txtNPrecioMenu3.Text = String.Empty;
        if (!hayEventos)
        {
            lblMensajePendientes.Text = "No hay Eventos para registrar cobro";
            lblMensajePendientes.Visible = true;
        }
    }
   
    protected bool listarEventos()
    {
        //ademas de lo que esta trayendo tendria que traer el precio real y precio estimado
        App_Negocio.Evento evento = new App_Negocio.Evento();
        DataTable dt = evento.listarEventos();
        DataView dv = dt.DefaultView;
        Session["dvEvento"] = dv;
        gvEvento.DataSource = dv;
        gvEvento.DataKeyNames = new string[] { "Nro", "Fecha", "Apellido", "Nombre", "MontoTotal" };
        gvEvento.DataBind();
        bool hayFilas = false;
        if (dt.Rows.Count > 0)
        {
            hayFilas = true;
        }

        return hayFilas;
    }
    
    protected void gvEvento_SelectedIndexChanged(object sender, EventArgs e)
    {
        Panel3_ModalPopupExtender.Hide();
        cargarDetalleCobros();
    }

    protected void cargarDetalleCobros() {
        
        App_Negocio.Evento evento = new App_Negocio.Evento();
        evento.Id = int.Parse(string.Format(gvEvento.SelectedDataKey.Values["Nro"].ToString()));

        DataTable dt = evento.listarCobros();
        DataView dv = dt.DefaultView;

        gvCobros.DataSource = dv;
        gvCobros.DataKeyNames = new string[] { "Fecha", "Monto" };
        gvCobros.DataBind();

        lblTotal.Text = string.Format(gvEvento.SelectedDataKey.Values["MontoTotal"].ToString());
        lblMontoTotal.Text = string.Format(gvEvento.SelectedDataKey.Values["MontoTotal"].ToString());

        double abonado = 0;

        foreach (DataRow dr in dt.Rows)
        {
            abonado += float.Parse(dr["Monto"].ToString());

        }
        
        lblAbonado.Text = ""+abonado;
        lblMontoAbonado.Text = ""+abonado;

        lblRestante.Text =""+ (Double.Parse(string.Format(gvEvento.SelectedDataKey.Values["MontoTotal"].ToString())) - abonado);
        lblMontoRestante.Text =""+ (Double.Parse(string.Format(gvEvento.SelectedDataKey.Values["MontoTotal"].ToString())) - abonado);
        txtPagoActual.Text =""+ (Double.Parse(string.Format(gvEvento.SelectedDataKey.Values["MontoTotal"].ToString())) - abonado);
       
        
    }
    
    protected void gvEvento_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataView dv = ((DataView)Session["dvEvento"]);
        dv.Sort = e.SortExpression;
        gvEvento.DataSource = dv;
        gvEvento.PageIndex = 0;
        gvEvento.DataBind();
    }
          
    protected void btnConfirmar_Click(object sender, EventArgs e)
    {
        if (float.Parse(txtPagoActual.Text) <= float.Parse(lblRestante.Text))
        {
            guardarCobro();
           
            Panel3_ModalPopupExtender.Hide();
            if (float.Parse(txtPagoActual.Text) == float.Parse(lblRestante.Text))
            {
                App_Negocio.Evento eve = new App_Negocio.Evento();
                eve.Id = int.Parse(string.Format(gvEvento.SelectedDataKey.Values["Nro"].ToString())); 
                eve.EveEstado = new Evento_Estado();
                eve.EveEstado.Numero = 2;
                eve.cambiarEstado();
                cargarDetalleCobros();
                actualizarPagina();
            }
           
                
            Response.Redirect("Principal_Empleados.aspx");
        }
        else
        {
            Panel3_ModalPopupExtender.Show();
            lblError.Text = "Ingr Monto menor";
        }        
    }

    protected void guardarCobro()
    {
        try
        {
            Cobro cobro = new Cobro();
            cobro.Fecha = System.DateTime.Now;
            cobro.Monto = float.Parse(txtPagoActual.Text);
            cobro.guardarCobro(int.Parse(string.Format(gvEvento.SelectedDataKey.Values["Nro"].ToString())));
                        
         }
        catch (SystemException ex)
        {
            throw new SystemException(ex.Message);
        }

    }
    
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("Principal_Empleados.aspx");
    }
}
